// 深拷贝(目前支持拷贝的引用类型为普通对象和数组)
function deepClone<T>(obj: T): T {
  const objClone: Partial<T> = Array.isArray(obj) ? [] : {};

  // 使用Object.entries可以统一对象/数组的遍历（代替for in & hasOwnProperty）
  for (const [key, value] of Object.entries(obj)) {
    if (typeof value === 'object' && value !== null) {
      objClone[key] = deepClone(value);
    } else {
      objClone[key] = value;
    }
  }

  return objClone as T;
}

export default deepClone;
